package serializer

import (
	"ws-demo-go/pkg/str"
)

const (
	Json int8 = 1 // JSON序列化（默认）
)

// GlobalFactory 全局 Factory 单例
var GlobalFactory = newSerializerFactory()

// Factory 序列化器工厂
type Factory struct {
	serializers map[int8]Serializer // 类型->序列化器的映射
}

// newSerializerFactory 初始化工厂，注册所有支持的序列化方式
func newSerializerFactory() *Factory {
	return &Factory{
		serializers: map[int8]Serializer{
			Json: &JSONSerializer{},
			// 新增序列化方式时，在这里注册即可
		},
	}
}

// GetSerializer 根据类型获取序列化器
func (f *Factory) GetSerializer(serializeType int8) (Serializer, error) {
	serializer, ok := f.serializers[serializeType]
	if !ok {
		return nil, str.Errorf("unsupported serialize type: %d", serializeType)
	}
	return serializer, nil
}
